package matriz_de_colores;

import java.util.ArrayList;

public class matriz_estatica {
	Object matriz[][] = new Object[144][144];
	
	public matriz_estatica(){
		
	}
	
	//codifica de binario a desimal
	public Object[][] Codificar(byte[] arreglo){
		try 
		{
		int contador_fila=0;
		int contador_columna=0;
		int contador_byte=2;//3 byts forman un color
		int contador_RGB=0;
		int RGB[]=new int[3];
		/*for (int i = 0; i < 143; i++) {
			for (int j = 0; j < 143; j++) {
				matriz[i][j]=new nodoC(0,0,0);
			}
		}*/
		for (int i = 0; i < arreglo.length; i++) 
		{
			//System.out.println("c ="+i);
			//System.out.println("cb="+contador_byte);
			//System.out.println("cr="+contador_RGB);
			
			
			
			RGB[contador_RGB]=arreglo[i]+128;
			if((contador_byte==0)&&(contador_RGB==2)){
				//System.out.println("entro");
				contador_byte=2;
				contador_RGB=0;
				nodoC nuevo=new nodoC(RGB[0],RGB[1],RGB[2]);
				matriz[contador_columna][contador_fila]=nuevo;
				
				//System.out.println("M"+contador_columna+","+contador_fila+"=["+RGB[0]+"]["+RGB[1]+"]["+RGB[2]+"]");
				
				if(contador_columna==143){
					contador_columna=0;
					contador_fila++;
					if(contador_fila>=144)
					{
						System.out.println("error overflow");
						return null;
						//throw new Exception;
					}
				}
				
				contador_columna++;
			}
			contador_byte--;
			contador_RGB++;
			
		}
		return matriz;
		}
		catch (Exception e) 
		{
			System.out.println("cagadales en la codificacion");
			return null;
		}
		
		
	}
	//codifica de desimal a binario
	public byte[] deCodificar(Object[][] m){
		try 
		{
			byte[] arreglo = null;
			nodoC nodoAUX;
			ArrayList<Object> aregloAUX=new ArrayList<Object>();
			int contadorAUX;
			
			for (int i = 0; i < 143; i++) {
				for (int j = 0; j < 143; j++) {
					if(m[i][j]==null){
						System.out.println("nodo nulo["+i+"]["+j+"]");
					}else{
					nodoAUX= (nodoC) m[i][j];
					int s=(int)nodoAUX.R+nodoAUX.G+nodoAUX.B;
					
					//if(s!=0){
											
						aregloAUX.add((byte)nodoAUX.R-128);
						//System.out.println(nodoAUX.R-128);
						
						aregloAUX.add((byte)nodoAUX.G-128);
						//System.out.println(nodoAUX.G-128);
						
						aregloAUX.add((byte)nodoAUX.B-128);
						//System.out.println(nodoAUX.B-128);
						//System.out.println("por=["+i+"]["+j+"]");
						//System.out.println(aregloAUX.size());
					//}
					}
				}
			}
			System.out.println("1");
			arreglo= new byte[aregloAUX.size()];
			System.out.println("2.0="+aregloAUX.size());
			System.out.println("2.1="+arreglo.length);
			System.out.println("2");
			byte auxbyte;
			int auxint=12;
			for (int i = 0; i < aregloAUX.size(); i++) {
				System.out.println("3");
				System.out.println("3.0="+aregloAUX.get(i));
				auxint=(int) aregloAUX.get(i);
				auxbyte=(byte) auxint;
				arreglo[i]=auxbyte;
				System.out.println(aregloAUX.get(i));
				System.out.println(arreglo[i]);

			}
			System.out.println("4");
			return arreglo;
		} 
		catch (Exception e) 
		{
			System.out.println("cagadales en la decodificacion");
			return null;
		}
		
	}
	
}
